python3小白课:参数收集
普通参数收集
python跟很多编程语言一样,支持定义个数可变的参数,这样定义起来很方便,也能支持处理多个传入的参数。
在定义形参的时候,我们可以在形参前面添加一个*星号用来表示这个形参支持接收多个参数值,多个参数值会自动组装成元组并传入,在函数内部我们就可以使用处理元组的方式来处理传入参数了。
# coding:utf-8
def info(name, *nickname):
print(f"您的名字为:{name}")
print(f"您的昵称有这些:{nickname}")
info("小白", "little bai", "白白", "小白白", "超级白")
这里我们使用了f-string来格式化文本,这里的第一个参数被赋值给name这个形参,而后面不论增加赋值多少个参数,都会组合成元组,赋值给nickname,需要注意的是,在函数内部调用nickname的时候,不需要带*号。
[!danger]
这种带一个
*号的能收集参数的形参在同一个函数中仅能定义一个,因为多了解释器就不好识别并自动分配了。
这样的形参还能放在前面,我们看个例子:
# coding:utf-8
def info(*nickname, name):
print(f"您的名字为:{name}")
print(f"您的昵称有这些:{nickname}")
info("little bai", "白白", "小白白", "超级白", name="小白")
由于加*的形参支持读取可变个数的参数,因此其他的参数,解释器默认不能正常找到,如果我们要赋值给name参数,就必须使用关键字参数,而关键字参数需要在调用参数的最后来写,所以就写成了我们上述代码的样子。
关键字参数收集
除了之前一个*的普通关键字收集,python函数在定义时,还支持在形参前加两个*号,即**形参名,这样写后,会将传入的关键字参数收集成字典,在函数内部可以调用。
[!danger]
同样的,在同一个函数定义中,也只允许有一个关键字参数收集的参数定义。
不过,关键字参数的收集可以跟普通参数收集同时存在。
具体的使用大家可以根据自己的业务场景来设计,我们来看个简单的使用。
# coding:utf-8
def info(name, *nickname, **score):
print(f"您的名字为:{name}")
print(f"您的昵称有这些:{nickname}")
print(f"您的成绩为:{score}")
info("小白", "little bai", "白白", "小白白", "超级白", 语文=89, 数学=99)
你也可以在函数内部使用字典的方法来获取内容。
逆向参数收集
除了前面讲的正向的参数收集,python函数定义还支持逆向参数收集。
# coding:utf-8
def info(name, nickname):
print(f"您的名字为:{name}")
print(f"您的昵称为:{nickname}")
a = ["小白", "白白"]
info(*a)
我们再来看一个传入字典的逆向收集。
# coding:utf-8
def info(name, nickname, score):
print(f"您的名字为:{name}")
print(f"您的昵称为:{nickname}")
print(f"您的成绩为:{score}")
a = {
"name": "小白",
"nickname": "白白",
"score": 94
}
info(**a)
这样函数就会自动寻找字典中的键来匹配了。我尝试了一下,如果字典中多定义一个键,发现会报错的。所以函数需要哪几个,就传入哪几个键的字典就好了。
单词释义
| 单词 | 释义 |
|---|---|
| nickname | 昵称,外号 |
| name | 姓名 |
| score | 成绩 |